package com.kamistoat.meimeistore.search.controller;

import com.kamistoat.common.To.EsTo.RegisterUpTo;
import com.kamistoat.common.To.EsTo.SpuUpTo;
import com.kamistoat.common.exception.BizCodeEnum;
import com.kamistoat.common.utils.R;
import com.kamistoat.meimeistore.search.service.ElasticSaveService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

@Slf4j
@RequestMapping("/search/save")
@RestController
public class ElasticSaveController {

    @Autowired
    ElasticSaveService elasticSaveService;

    /**
     * 上架SPU商品
     */
    @RequestMapping("/spuUpToES")
    public R spuUpToES(@RequestBody List<SpuUpTo> spuUpToList) {
        Boolean b = false;
        // 发生在try内的异常一般是是ES启动失败或链接失败导致的异常
        try {
            b = elasticSaveService.spuUpToES(spuUpToList);
        } catch (Exception e) {
            log.error("商品上架时ES出现错误:{}", e);
            return R.error(BizCodeEnum.PRODUCT_UP_EXCEPTION.getCode(), BizCodeEnum.PRODUCT_UP_EXCEPTION.getMessage());
        }
        // spuUpToES返回true说明有错误，返回false说明无错误
        if (!b) {
            log.info("ES上架成功");
            return R.ok();
        } else {
            log.error("向ES批量Index出错");
            return R.error(BizCodeEnum.PRODUCT_UP_EXCEPTION.getCode(), BizCodeEnum.PRODUCT_UP_EXCEPTION.getMessage());
        }
    }

    /**
     * 下架SPU商品
     */
    @RequestMapping("/spuDownToES")
    public R spuDownToES(@RequestBody List<Long> skuIdList) {
        Boolean b = false;
        // 发生在try内的异常一般是是ES启动失败或链接失败导致的异常
        try {
            b = elasticSaveService.spuDownToES(skuIdList);
        } catch (Exception e) {
            log.error("商品下架时ES出现错误:{}", e);
            return R.error(BizCodeEnum.PRODUCT_DOWN_EXCEPTION.getCode(), BizCodeEnum.PRODUCT_DOWN_EXCEPTION.getMessage());
        }
        // spuDownToES返回true说明有错误，返回false说明无错误
        if (!b) {
            log.info("ES下架成功");
            return R.ok();
        } else {
            log.error("向ES批量Delete出错");
            return R.error(BizCodeEnum.PRODUCT_DOWN_EXCEPTION.getCode(), BizCodeEnum.PRODUCT_DOWN_EXCEPTION.getMessage());
        }
    }


    /**
     * 自己写的方法，注册时向ES中存放用户名和手机号
     *
     * @param registerUpTo To
     * @return R
     */
    @RequestMapping("/memberToES")
    public R registerUpToES(@RequestBody RegisterUpTo registerUpTo) {
        try {
            elasticSaveService.registerUpToEs(registerUpTo);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 这里偷懒不想做异常处理了。
        return R.ok();
    }

    /**
     * 自己写的方法，前端直接从ES中查询看看是否重名
     *
     * @param username username
     * @return
     */
    @GetMapping("/usernameUniqueES")
    public Integer usernameUniqueES(@RequestParam String username) {
        Integer unique = 0;
        try {
            unique = elasticSaveService.usernameUniqueES(username);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return unique;
    }
}
